import { STORAGE_KEY } from "./config"

// 基础请求地址
const baseURL = 'http://2fer2m.natappfree.cc/'

// 创建请求插件
export const requestPlugin = {
    install: (app) => {
        // 添加全局属性
        app.config.globalProperties.$request = {
            get,
            post
        }
    }
}

// 请求方法
const request = (options) => {
    // 处理请求URL
    options.url = `${baseURL}${options.url}`

    // 处理请求头
    options.header = {
        ...options.header
    }
	
	

    // 如果是POST请求，添加表单格式请求头
    if (options.method === 'POST') {
        options.header = {
            'content-type': 'application/x-www-form-urlencoded',
            ...options.header
        }
    }
	
	// 向data添加本地数据
	if(uni.getStorageSync(STORAGE_KEY.USER_INFO)) {
		let a = JSON.parse(uni.getStorageSync(STORAGE_KEY.USER_INFO))
		options.data = {
			...options.data,
			user_id: a.id
		}
	}

    return new Promise((resolve, reject) => {
        uni.request({
            ...options,
            success: (res) => {
                if (res.statusCode === 200 && res.data.code === 200) {
                    // 如果提供了成功提示文本，则显示
                    if (options.successMsg) {
                        uni.showToast({
                            title: options.successMsg,
                            icon: 'success'
                        })
                    }
                    resolve(res.data)
                } else {
                    reject(res)
                    // 如果提供了失败提示文本，则显示，否则显示接口返回的错误信息
                    uni.showToast({
                        title: options.errorMsg || res.data.msg,
                        icon: 'none'
                    })
                }
            },
            fail: (err) => {
                reject(err)
                uni.showToast({
                    title: options.errorMsg || '网络错误',
                    icon: 'none'
                })
            }
        })
    })
}

// 封装GET请求
const get = (url, data = {}, msg = {}) => {
    return request({
        url,
        method: 'GET',
        data,
        successMsg: msg.success,
        errorMsg: msg.error
    })
}

// 封装POST请求
const post = (url, data = {}, msg = {}) => {
    return request({
        url,
        method: 'POST',
        data,
        successMsg: msg.success,
        errorMsg: msg.error
    })
}

export default {
    get,
    post,
	baseURL
}